package com.study.readerwriter;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import org.junit.Test;

/**
* @Name: InputStreamReaderTest
* @Description: 字节->字符读取转换流测试类
* 说明：
* 	InputStreamReader类：InputStreamReader 是字节流通向字符流的桥梁：它使用指定的 charset 读取字节并将其解码为字符。
* 		每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。
* 		要启用从字节到字符的有效转换，可以提前从底层流读取更多的字节，使其超过满足当前读取操作所需的字节。 
* 		为了达到最高效率，可要考虑在 BufferedReader 内包装 InputStreamReader。例如： 
* 		BufferedReader in  = new BufferedReader(new InputStreamReader(System.in));
* 	构造方法：
* 		InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
* 		InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。
* 	获取字符集：
* 		public String getEncoding() 返回此流使用的字符编码的名称。 
* 	读数据方法：
* 		 public int read() 读取一个字符，返回读取的字符，如果已到达流的末尾，则返回 -1 
* 		 public int read(char cbuf[]) 读取一个字符数组，返回读取的字符数，如果已到达流的末尾，则返回 -1 
* 		 public int read(char cbuf[], int offset, int length) 读取字符数组缓冲中指定长度的内容。，返回读取的字符数，如果已到达流的末尾，则返回 -1 
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-15 下午10:47:26 
* @Version: V1.0
 */
public class InputStreamReaderTest {
	
	/**
	* @Name: inputStreamReader
	* @Description: 字节->字符转换读取流测试方法
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-15 下午11:03:14
	* @Parameters: 
	* @Return: void
	 */
	@Test
	public void inputStreamReader() throws IOException{
		//创建文件字节读取流对象，并包装成转换字符读取流对象
		InputStreamReader reader = new InputStreamReader(new FileInputStream("fos2.txt")) ;
		char[] cbuf = new char[1024] ;
		int len = 0 ;
		//读取数据：每次读取一个字符数组
		while((len = reader.read(cbuf)) != -1) {
			System.out.print(new String(cbuf, 0, len));
		}
		//获取文件字节流的编码
		String encoding = reader.getEncoding() ;
		System.out.println(encoding);
		//释放资源
		reader.close() ;
	}

}
